/**
 * Form表单验证(公共使用)
 * dxk
 * @type {RegExp}
 */
// 账号
let codeReg = /^(?![0-9]*$)(?![a-zA-Z]*$)[a-zA-Z0-9]{6,20}$/;
//手机号
let phoneReg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;

// 必须为数字
let numberReg = /^\d+$|^\d+[.]?\d+$/;

// 密码
let passwordReg =
  /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/;

// 联系人
let contactsReg = /^[\u0391-\uFFE5A-Za-z]+$/;
//  身份证号
let regId =
  /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
//  邮箱
let emailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;

let FormValidate = (function () {
  function FormValidate() {}
  // From表单验证规则  可用于公用的校验部分
  FormValidate.Form = function () {
    return {
      // 账号的验证规则
      validateCode(rule, value, callback) {
        if (!value) {
          return callback(new Error("请输入账号"));
        }
        if (!codeReg.test(value)) {
          callback(new Error("账号必须为6-20位字母和数字组合"));
        } else {
          callback();
        }
      },
      // 只能数字的验证
      validateNumber(rule, value, callback) {
        if (value !== "") {
          if (!numberReg.test(value)) {
            callback(new Error("格式必须为数字"));
          } else {
            callback();
          }
        } else {
          callback();
        }
      },
       // 只能数字的验证-必填
       validateNumberOne(rule, value, callback) {
        if (value !== "") {
          if (!numberReg.test(value)) {
            callback(new Error("格式必须为数字"));
          } else {
            callback();
          }
        } else {
          callback(new Error("请输入"));
        }
      },
      //只能填写正整数-不必填
      checkInterNum(rule, value, callback) {
        const reg = /^[0-9]*[1-9][0-9]*$/;
        if (!value) {
          callback();
          // return callback(new Error("请输入"));
        } else if (!reg.test(value)) {
          return callback(new Error("请输入正确的数字格式"));
        } else {
          callback();
        }
      },

      //只能填写正整数包含0-不必填
      checkZhengNum(rule, value, callback) {
        const reg = /^([1-9]\d*|[0]{1,1})$/;
        if (!value) {
          callback();
          // return callback(new Error("请输入"));
        } else if (!reg.test(value)) {
          return callback(new Error("请输入正确的数字格式"));
        } else {
          callback();
        }
      },
      //只能填写正整数-必填
      checkInterNumRequired(rule, value, callback) {
        const reg = /^[0-9]*[1-9][0-9]*$/;
        if (!value) {
          return callback(new Error("请输入"));
        } else if (!reg.test(value)) {
          return callback(new Error("请输入正确的数字格式"));
        } else {
          callback();
        }
      },
      //有两位小数的正实数-必填
      checkInterNumAll(rule, value, callback) {
        const reg = /^[0-9]+(\.[0-9]{2})?$/;
        if (!value) {
          return callback(new Error("请输入"));
        } else if (!reg.test(value)) {
          return callback(new Error("请输入数字格式，可保留两位小数"));
        } else {
          callback();
        }
      },
      //有两位小数的正实数-非必填
      checkInterNumAllNo(rule, value, callback) {
        const reg = /^[0-9]+(\.[0-9]{2})?$/;
        if (!value) {
          callback();
        } else if (!reg.test(value)) {
          return callback(new Error("请输入数字格式，可保留两位小数"));
        } else {
          callback();
        }
      },
      // 密码的验证
      validatePsdReg(rule, value, callback) {
        if (value === "") {
          callback(new Error("请输入密码"));
        } 
        var pwdRegex = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{1,})(?=.*[a-z]{1,}).*$/;
        if (!pwdRegex.test(value)) {
          callback(new Error("6-16个字符，须包含大小写字母、数字的组合"));
        } else {
          callback();
        }
      },
      // 联系人
      validateContacts(rule, value, callback) {
        if (!value) {
          return callback(new Error("请输入联系人"));
        }
        if (!contactsReg.test(value)) {
          callback(new Error("联系人不可输入特殊字符"));
        } else {
          callback();
        }
      },
      // 邮箱的验证规则
      validateEmail(rule, value, callback) {
        if (!value) {
          return callback(new Error("请输入邮箱"));
        }
        if (!emailReg.test(value)) {
          callback(new Error("请输入有效的邮箱"));
        } else {
          callback();
        }
      },
      // 手机号码的验证-必填
      validatePhone(rule, value, callback) {
        if (!value) {
          return callback(new Error("请输入手机号码"));
        }
        if (!phoneReg.test(value)) {
          callback(new Error("手机号格式不正确"));
        } else {
          callback();
        }
      },
      // 手机号码的验证-非必填
      validatePhoneNo(rule, value, callback) {
        if (!value) {
          callback();
        }
        if (!phoneReg.test(value)) {
          callback(new Error("手机号格式不正确"));
        } else {
          callback();
        }
      },
      // 手机号和座号
      checkTel(rule, value, callback) {
        if (value === "") {
          callback(new Error("请输入"));
        } else {
          if (/^((0\d{2,3}-\d{7,8})|(1[3456789]\d{9}))$/.test(value) == false) {
            callback(new Error("请输入有效的手机号或者座机号"));
          } else {
            callback();
          }
        }
      },
      // 身份证的验证规则
      cardID(rule, value, callback) {
        if (!value) {
          return callback(new Error("请输入身份证号"));
        }
        if (!regId.test(value)) {
          callback(new Error("请输入正确的身份证号码"));
        } else {
          callback();
        }
      },
      // 统一社会信用代码
      checkUnifycode(rule, value, callback) {
        if (value === "") {
          callback(new Error("请输入统一社会信用代码"));
        } else {
          var reg = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/;
          if (!reg.test(value)) {
            callback(new Error("请输入正确的统一社会信用代码"));
          } else {
            callback();
          }
        }
      },
      // 车牌号验证
      carPhoneValid(rule, value, callback){
        const plateNumber = /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1})$/
        if (plateNumber.test(value)) {
          callback()
        } else {
          callback(new Error('请输入正确的车牌号'))
        }
      },
      checkPassport(rule, value, callback){
        /**
         * 规则： 新版8位或18位数字， 旧版10位数字 + 英文字母
         * 样本： 12345678 或 1234567890B
         */
        const passportReg = /^([a-zA-z]|[0-9]){9}$/
        if (value) {
          if (passportReg.test(value)) {
            callback()
          } else {
            callback(new Error('请输入正确的护照号码'))
          }
        } else {
          callback(new Error('请输入护照号码'))
        }
      }
      
    };
  };

  return FormValidate;
})();

exports.FormValidate = FormValidate;
// 页面中使用方法
// import rulesUtil from "@/utils/rules"//引入
// validator: rulesUtil.FormValidate.Form().checkUnifycode//加入验证（date的return 的 rules里面）
